home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / demo / scanwm15.zip / BASEPAK.MS_ / BASEPAK.MS
Text File  |  1995-03-09  |  27KB  |  959 lines

  1. '**************************************************************************
  2. '*                       base pack setup script
  3. '**************************************************************************
  4.  
  5. '$DEFINE DEBUG  ''Define for script development/debugging
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'msdetect.inc'
  9. '$INCLUDE 'msregdb.inc'
  10.  
  11. DECLARE FUNCTION ShowWindow LIB "user" (Hwnd%, nCmdShow%) AS INTEGER
  12. DECLARE FUNCTION WinExec LIB "kernel" (RunPgm$, nCmdShow%)AS INTEGER
  13. '* DECLARE FUNCTION CheckIDValidity LIB "scid.dll" (SerNo$) AS INTEGER
  14. '* DECLARE FUNCTION CopyIDResource  LIB "scid.dll" (Na$, Co$, Ser$) AS INTEGER
  15. CONST SW_SHOWMAXIMIZED%   = 3
  16. CONST SW_SHOW% = 5
  17. CONST STFNOSCANUS = 1026   ''quit because Scan/US not installed
  18.  
  19. ''File Types
  20.  
  21. ''** system type includes exec, schema, ini, and config
  22. CONST SYSTEMFILES    = 1
  23.  
  24. CONST MAPFILES     = 5
  25. CONST DATAFILES    = 7
  26. CONST HELPFILES    = 8
  27. CONST USERFILES    = 9
  28. CONST TOTALFILETYPES = 9
  29.  
  30. ''Dialog ID's
  31. CONST WELCOME       = 100
  32. CONST ASKQUIT       = 200
  33. CONST QUICKPATH      = 300
  34. CONST EXITFAILURE   = 400
  35. CONST EXITQUIT      = 600
  36. CONST OPTIONS       = 800
  37. CONST APPHELP       = 900
  38. CONST PROBLEM = 1000
  39. CONST EXITSUCCESS   = 700
  40. CONST NOQUICKDLG      = 1200
  41. CONST DESTPATH      = 1800
  42. CONST QUICKDLG      = 1700
  43. CONST CUSTINST      = 6200
  44. CONST CUSTHELP      = 2300
  45. CONST TOOBIG        = 6300
  46. CONST BADPATH       = 6400
  47. CONST CDGETNAMEORG    = 7500
  48. CONST BILLBOARD1        = 2101
  49. CONST BILLBOARD2        = 2400
  50. CONST BILLBOARD3        = 2700
  51. CONST SCANEXIST = 2800
  52. CONST ALREADY = 7801
  53. ''Bitmap ID
  54. CONST LOGO = 1
  55.  
  56. GLOBAL WINDIR$      ''Windows directory.
  57. GLOBAL INIDEST$ ''Single-user, the Windows Directory.  Network, cd be anywhere
  58. GLOBAL INIFILE$ ''Single-user, the Windows Directory.  Network, cd be anywhere
  59. GLOBAL DEST$        ''Default destination directory.
  60. GLOBAL OPTCUR$      ''Option selection from option dialog. (quick/custom)
  61. GLOBAL SrcDir$      ''source directory 
  62. GLOBAL cwd$          '' current working directory.
  63.  
  64. ''destination dirs
  65. GLOBAL MAPDEST$     ''cartography destination directory.
  66. GLOBAL DATADEST$    ''
  67. GLOBAL CDMOVIES$
  68.  
  69. GLOBAL DBXDEST$     ''schema directory
  70.  
  71. GLOBAL HELPENTRY$                '' The data description for 
  72. GLOBAL BASISDBX$                '' The data description for 
  73. GLOBAL PER92DBX$                '' The 1992 period dbx
  74. GLOBAL CUSTOMDBX$                '' The customer's custom dbx
  75.  
  76.  
  77. GLOBAL EXEDEST$     ''scanus.exe directory
  78. GLOBAL GDSDEST$     ''config directory
  79. GLOBAL HLPDEST$     ''help files directory
  80. GLOBAL USERDEST$    ''user files directory, incl. sample excel files
  81. GLOBAL AREADEST$    ''arealists
  82. GLOBAL TUTDEST$     ''tutorial example data and any supporting files
  83. GLOBAL INDXDEST$    ''index files directory
  84.  
  85. GLOBAL CompanyName$ '' typed in during install, used during print!
  86. GLOBAL UserName$
  87. GLOBAL ValidSerialNumber$
  88.  
  89. '** GLOBAL  XLREPORTMACRO$
  90. GLOBAL PROD$
  91.  
  92. ''CustInst list symbol names
  93. GLOBAL SYSNEEDS$   
  94. GLOBAL MAPNEEDS$    ''Option list costs per drive
  95.  
  96. GLOBAL DATANEEDS$
  97. GLOBAL HELPNEEDS$    ''Option list costs per drive
  98. GLOBAL USERNEEDS$    ''Option list costs per drive
  99.  
  100. GLOBAL OPT2NEEDS$
  101. GLOBAL LISTOFCOSTS$
  102. GLOBAL DRIVENEEDS$
  103. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  104. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  105.  
  106. Global bDestinationTooSmall%
  107. Global ChangedList%
  108. GLOBAL change%
  109. GLOBAL CCSys&
  110. GLOBAL CCMap&
  111. GLOBAL CCData&
  112. GLOBAL CCHelp&
  113. GLOBAL CCUser&
  114.  
  115. GLOBAL TCOST$   '' string equivalent, in "K" of  New Cost of change in Global CostChange&
  116.  
  117. '** SpreadSheet Existence Variables
  118.  
  119. GLOBAL SheetAppExists%
  120. GLOBAL ExcelExists%
  121. GLOBAL ExcelPath$
  122. GLOBAL LotusExists%
  123. GLOBAL LotusPath$
  124. GLOBAL QProExists%
  125. GLOBAL QProPath$
  126. GLOBAL PrevScanExists%
  127. GLOBAL PrevScanPath$
  128.  
  129.  
  130. DECLARE SUB MakeNameResource
  131. DECLARE SUB Install
  132. DECLARE SUB CreateCopyList
  133. DECLARE SUB SetDestVars
  134. DECLARE SUB CleanSetDestVars
  135. DECLARE FUNCTION MakePath (szDir$,szFile$) AS STRING
  136. DECLARE FUNCTION DoesSheetExist (szExt$,szPath$,szName$) AS INTEGER
  137.  
  138. DECLARE SUB MakeCopyList
  139. DECLARE SUB RecalcPath
  140. DECLARE SUB CostCalc
  141. DECLARE SUB AddOptFilesToCopyList (ftype%)
  142. DECLARE FUNCTION RecalcOptFiles (ftype%) AS LONG
  143. DECLARE SUB InitDriveNeed
  144. DECLARE SUB ClearDriveNeed
  145.  
  146. ''Dialog list symbol names
  147. GLOBAL CHECKSTATES$
  148.  
  149. GLOBAL PATHSIZES$
  150. GLOBAL PATHNAMES$
  151. GLOBAL HwndApp%
  152. GLOBAL NameResource As String *81
  153. GLOBAL bCleanInstall%
  154. GLOBAL bBaseChanged%
  155. GLOBAL bOnCd%
  156.  
  157. GLOBAL ProductMovies$           '* Product includes ScreenCam movies (*and scrncamp.exe)
  158. GLOBAL ProductMoviesOnly$
  159. GLOBAL bScreenCam%
  160. GLOBAL EXECPROGRAMLINE$ 
  161.  
  162. INIT:
  163.     bOnCd%=0
  164.     bCleanInstall%=1
  165.     CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
  166.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  167.  
  168. '** rc%=DoMsgBox("Step 0.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  169.     HwndApp% =   HwndFrame()
  170.     IF HwndApp% <> 0 THEN
  171.         SuccessVal% = ShowWindow(HwndApp%,SW_SHOWMAXIMIZED%)
  172.     ENDIF
  173.  
  174.     '** Set up write task to maximize
  175.     EXECPROGRAMLINE$ =  "\maxi write "
  176.     ScreencamExt$=".scm"
  177.     
  178.     bScreenCam% = DoesRegKeyExist(ScreencamExt$)
  179.     IF bScreenCam% THEN
  180. '        OpenLogFile "c:\LOGFILE.OUT",0
  181.     szMoviePath$ = GetRegKeyValue("ScreenCamMovie\protocol\stdFileEditing\server")
  182.     bScreenCam%  = DoesFileExist(szMoviePath$, femRead)
  183. '        WriteToLogFile "  Screencam is really there! '" + szMoviePath$ + "'"
  184. '        CloseLogFile
  185.     ENDIF                
  186.  
  187.     
  188.     SetBitmap CUIDLL$, LOGO
  189.     SetTitle "Scan/US Setup"
  190.     SetAbout "Scan/US", "1.0"
  191.     PrevScanExists% = 0
  192.  
  193.     '' Get current working directory
  194.     cwd$ = GetSymbolValue("STF_CWDDIR")
  195.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  196.     IF szInf$ = "" THEN
  197.     szInf$ = cwd$ + "BASEPAK.INF"
  198.     END IF
  199.  
  200. '** Ready to Get the info about the movies    
  201.     szFeatLoc$ =    cwd$ + "product.gds"
  202.     cwd$=""
  203.     RemoveSymbol ("STF_CWDDIR")
  204.  
  205. '** Get the info about the movies    
  206.     ProductMovies$=GetIniKeyString(szFeatLoc$,"product","movies")
  207.     ProductMoviesOnly$=GetIniKeyString(szFeatLoc$,"product","justmovies")
  208.  
  209.     ReadInfFile szInf$
  210. '**rc%=DoMsgBox("Read the inf file.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  211.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  212.  
  213. '**     i% = DoMsgBox("Source Directory ('"+SrcDir$+"') has been set up.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  214.  
  215.     ProductDrive$ = MID$(SrcDir$, 1, 1)
  216.     
  217.     CDMOVIES$ = ProductDrive$ + ":\movies"
  218.     
  219.     HELPENTRY$ = GetSectionKeyFilename("help","helpentry")
  220.     BASISDBX$ = GetSectionKeyFilename("schema","basis")
  221.     PER92DBX$ = GetSectionKeyFilename("schema","period")
  222.     
  223. '**        CUSTOMDBX$ = GetSectionKeyFilename("schema","customer")
  224.  
  225.     MAPNEEDS$=            "MAPneedList" 
  226.     DATANEEDS$=           "DATAneedList" 
  227.     HELPNEEDS$=           "HELPneedList" 
  228.     USERNEEDS$=           "USERneedList" 
  229.     SYSNEEDS$=            "SYSneedList" 
  230.     EXTRACOST$=           "EXTracost"
  231.  
  232.     ''CustInst list symbols
  233.     PATHSIZES$ = "PathSizeItemsText"
  234.     PATHNAMES$  = "PathNamesItemsText"
  235.  
  236.  
  237.     FOR i% = 1 TO 7 STEP 1
  238.     AddListItem PATHSIZES$, "0K"
  239.     NEXT i%
  240.  
  241. '** rc%=DoMsgBox("Added the list items.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  242.  
  243.     ''Disk cost list symbols
  244.     MAPNEEDS$   = "MapNeeds"
  245.     DATANEEDS$  = "DataNeeds"
  246.     BIGLIST$    = "BigList"
  247.     DRIVENEEDS$ = "DriveNeeds"
  248.     FOR i% = 1 TO TOTALFILETYPES STEP 1
  249.     AddListItem BIGLIST$, ""
  250.     NEXT i%
  251.  
  252.     OPTCUR$ = "1"               '** Option selection: quick/custom
  253.  
  254. '$IFDEF DEBUG
  255.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  256.     WinDrive$ = MID$(GetWindowsDir, 1, 1)
  257.     IF IsDriveValid(WinDrive$) = 0 THEN
  258.     i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  259.     GOTO QUIT
  260.     END IF
  261. '$ENDIF ''DEBUG
  262.  
  263.     InitDriveNeed
  264.   WINDIR$ = GetWindowsDir()
  265.  
  266. '** Look for some SpreadSheets
  267.     ExcelExists% = DoesSheetExist("XLM",ExcelPath$,"EXCEL")
  268.     QProExists% = DoesSheetExist("WB1",QProPath$,"QPW")
  269.     LotusExists% = DoesSheetExist("WK4",LotusPath$,"123W")
  270.     SheetAppExists% = ExcelExists% + QProExists% + LotusExists%
  271. '**     PrevScanExists% = DoesSheetExist("GDS",PrevScanPath$,"SCANUS")
  272.  
  273.  
  274.     INIDEST$ = GetIniKeyString("win.ini","scanUS","IniPath")
  275. '**rc%=DoMsgBox("Got the ini path string.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  276.     IF INIDEST$="" THEN
  277.         INIDEST$  = WINDIR$
  278.     END IF
  279.  
  280.         IF MID$(INIDEST$, LEN(INIDEST$), 1) = "\" THEN
  281.         ELSE
  282.         INIDEST$ = INIDEST$ + "\"
  283.         END IF
  284.  
  285.     INIFILE$ = INIDEST$ +"SCANUS.INI"
  286.  
  287.  
  288.  PROD$ = "PRODUCTS"
  289.  DEST$ = GetIniKeyString(INIFILE$,PROD$,"basepack")
  290.  
  291.     IF DEST$ = "" THEN
  292.         PrevScanExists% = 0
  293.        DEST$ = "C:\SCANUS"
  294.       ELSE
  295.         PrevScanExists% = 1
  296.         dlg% =ALREADY
  297.         GOTO QUITL1
  298.       ENDIF
  299.  
  300.  
  301. '** Perhaps add call to IsDirWritable here, to catch scanus.ini messups.
  302. '** Intro message.  Just check ok to continue.
  303. WELCOME:
  304. ''rc%=DoMsgBox("Doesn't exist: made the copy list.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  305.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  306.     IF sz$ = "CONTINUE" THEN
  307.     UIPop 1
  308.     ELSE
  309.     GOSUB ASKQUIT
  310.     GOTO WELCOME
  311.     END IF
  312.  
  313.  
  314.  
  315. '** Fall through to this dialog.  Can also jump back from a BACK
  316.  
  317. CREATEIDRESOURCE:
  318.  
  319. '** Fall through to this dialog, or jumped here when already installed from floppy
  320. '**  Can also jump back from QuickPath
  321.  
  322. '** Now, enter the base path to install to.
  323. GETPATH0:
  324.     olddest$ = DEST$
  325.  
  326. GETPATH:
  327.     SetSymbolValue "EditTextIn", DEST$
  328.     SetSymbolValue "EditFocus", "END"
  329. GETPATHL1:
  330.     sz$ = UIStartDlg(CUIDLL$, QUICKPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  331.     DEST$ = GetSymbolValue("EditTextOut")
  332.  
  333.     IF sz$ = "CONTINUE" THEN
  334.     IF olddest$ <> DEST$ THEN
  335.     olddest$ = DEST$
  336.                 ChangedList% = 1 
  337.                 bBaseChanged% = 1
  338.             ELSE
  339.                 ChangedList% = 0
  340.             END IF
  341.  
  342.     IF IsDirWritable(DEST$) = 0 THEN
  343.         GOSUB BADPATH
  344.         GOTO GETPATHL1
  345.     END IF
  346.     UIPop 1
  347.  
  348.  
  349.     ELSEIF sz$ = "REACTIVATE" THEN
  350.     GOTO GETPATHL1
  351.     ELSEIF sz$ = "BACK" THEN
  352.     UIPop 1
  353.     GOTO GETPATH
  354.     ELSE
  355.     GOSUB ASKQUIT
  356.     GOTO GETPATH
  357.     END IF
  358.  
  359.     IF ChangedList% = 1 THEN
  360.     CleanSetDestVars
  361.     MakeCopyList    '** Time consuming.  Was done for default case.  Only do again if nec.  
  362.     ELSE
  363.     CleanSetDestVars
  364.     END IF
  365.  
  366.     StillNeed& = GetCopyListCost(EXTRACOSTS$, LISTOFCOSTS$, "")
  367.  
  368.     IF StillNeed& > 0 THEN
  369.     '** there's not enough space, go give opportunite to shuffle around.
  370. '**      GOTO CUSTOMOPTION
  371.      GOSUB TOOBIG
  372.      GOTO GETPATH
  373.     ELSE
  374.     '** there's enough space, go ahead.
  375.      GOTO DOQUICKINSTALL
  376.     END IF
  377.  
  378.  
  379. DOQUICKINSTALL:
  380.     Install
  381.     GOTO QUIT
  382.  
  383. QUIT:
  384.     dlg% =PROBLEM
  385.  
  386.     ON ERROR GOTO ERRQUIT
  387.  
  388.     IF ERR = 0 THEN
  389.     dlg% = EXITSUCCESS
  390.     ELSEIF ERR = STFQUIT THEN
  391.     dlg% = EXITQUIT
  392.     ELSE
  393.     dlg% = EXITFAILURE
  394.     END IF
  395. QUITL1:
  396.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  397.     IF sz$ = "REACTIVATE" THEN
  398.     GOTO QUITL1
  399.     END IF
  400.     UIPop 1
  401.  
  402.     END
  403.  
  404. ERRQUIT:
  405.     i% = DoMsgBox("Setup sources were corrupted, call 310-820-1581!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  406.     END
  407.  
  408.  
  409.  
  410. TOOBIG:
  411. '*  i% = DoMsgBox("TooBig", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  412.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  413.     IF sz$ = "REACTIVATE" THEN
  414.       '**  RecalcPath
  415.     GOTO TOOBIG
  416.     END IF
  417.     UIPop 1
  418.     RETURN
  419.  
  420.  
  421. TOOBIGMAP:
  422.     sz$ = UIStartDlg(CUIDLL$, TOOBIGMAP, "FInfo0DlgProc", 0, "")
  423.     IF sz$ = "REACTIVATE" THEN
  424.      '**   RecalcPath
  425.     GOTO TOOBIGMAP
  426.     END IF
  427.     UIPop 1
  428.     RETURN
  429.  
  430.  
  431. BADPATH:
  432.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  433.     IF sz$ = "REACTIVATE" THEN
  434.     GOTO BADPATH
  435.     END IF
  436.     UIPop 1
  437.     RETURN
  438.  
  439.  
  440.  
  441. ASKQUIT:
  442.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  443.  
  444.     IF sz$ = "EXIT" THEN
  445.     UIPopAll
  446.     ERROR STFQUIT
  447.     ELSEIF sz$ = "REACTIVATE" THEN
  448.     GOTO ASKQUIT
  449.     ELSE
  450.     UIPop 1
  451.     END IF
  452.     RETURN
  453.  
  454.  
  455.  
  456.  
  457.  
  458. '**
  459. '** Purpose:
  460. '**     Builds the copy list and performs all installation operations.
  461. '** Arguments:
  462. '**     none.
  463. '** Returns:
  464. '**     none.
  465. '*************************************************************************
  466. SUB Install STATIC
  467.  
  468. '** add check for MAPDEST$ -- its absence means Scan\US wasn't installed
  469. '** or the setup was messed up later on.
  470.  
  471.  
  472.     CreateDir DEST$        , cmoNone
  473.     CreateDir MAPDEST$     , cmoNone
  474.     CreateDir DATADEST$    , cmoNone
  475.     CreateDir HLPDEST$     , cmoNone
  476.     CreateDir USERDEST$    , cmoNone
  477.     CreateDir INDXDEST$    , cmoNone
  478.  
  479.     CreateDir DBXDEST$     , cmoNone
  480.     CreateDir EXEDEST$     , cmoNone
  481.     CreateDir GDSDEST$     , cmoNone
  482.     
  483.  
  484.  
  485.  
  486. '    OpenLogFile MakePath(DEST$, "LOGFILE.OUT"), 0
  487.  
  488.     CreateCopyList
  489.  
  490.     CGX% = 125
  491.     CGY% = 125
  492.      SetCopyGaugePosition CGX%, CGY%
  493.      AddToBillboardList "mscuistf.dll", BILLBOARD1, "FModelessDlgProc", 100
  494.      AddToBillboardList "mscuistf.dll", BILLBOARD2, "FModelessDlgProc", 100
  495.      AddToBillboardList "mscuistf.dll", BILLBOARD3, "FModelessDlgProc", 100
  496.  
  497.     CopyFilesInCopyList
  498.  
  499.     'it's a userdata (10) with an id of 7 (7)
  500.           UserName$="Scan/US Working Model"
  501.         CompanyName$="Scan/US, Inc."
  502.         ValidSerialNumber$="15019372777751"
  503.         MakeNameResource        '** Add up username, companyname, validseron, and put in resource
  504.       StampResource "exec","scanexe",EXEDEST$,10,7, NameResource, 80
  505. '**      StampResource "Files","scid",EXEDEST$,10,7, NameResource, 80
  506.  '   CloseLogFile
  507.  
  508.  
  509. IF bOnCd% THEN
  510. '**    datapath$ = MAPDEST$ + ";"  + DATADEST$ + ";" + USERDEST$  + ";"+ CDGRIDDATA$ + ";"  + CDGRIDMAPS$ + ";" + CDSTREETMAPS$ 
  511. ELSE
  512.     datapath$ = MAPDEST$ + ";" + DATADEST$ + ";" + USERDEST$
  513. ENDIF
  514.  
  515. '*** + ";" + HLPDEST$ 
  516.  
  517.     CreateIniKeyValue "WIN.INI","Extensions","gds", EXEDEST$ + "\scanus.exe ^.gds",cmoVital OR cmoOverwrite
  518.     CreateIniKeyValue INIFILE$, "PATHS", "LAYOUT", EXEDEST$ , cmoNone OR cmoOverwrite
  519.     CreateIniKeyValue INIFILE$, "paths", "data",  datapath$, cmoVital OR cmoOverwrite
  520.  
  521.     CreateIniKeyValue INIFILE$, "paths", "config", GDSDEST$ + "\scanus.gds", cmoVital OR cmoOverwrite
  522.  
  523. '    CreateIniKeyValue INIFILE$, "paths", "schema", DBXDEST$ + "\" + BASISDBX$ + ";" + DBXDEST$ + "\" + PER92DBX$ + ";" + DBXDEST$ + "\" + CUSTOMDBX$, cmoVital OR cmoOverwrite
  524.  
  525.     CreateIniKeyValue INIFILE$, "paths", "schema", DBXDEST$ + "\" + BASISDBX$ + ";" + DBXDEST$ + "\" + PER92DBX$, cmoVital OR cmoOverwrite
  526.  
  527.     CreateIniKeyValue INIFILE$, "paths", "USERDATA", USERDEST$, cmoVital OR cmoOverwrite
  528.     CreateIniKeyValue INIFILE$, "paths", "index", INDXDEST$, cmoVital OR cmoOverwrite
  529. '** help only found when backslash is appended to help line.
  530.     CreateIniKeyValue INIFILE$, "paths", "help", HLPDEST$ + "\" + HELPENTRY$, cmoNone OR cmoOverwrite
  531. '**    CreateIniKeyValue INIFILE$, "paths", "helpfile", HELPENTRY$, cmoNone OR cmoOverwrite
  532.  
  533.  
  534.     CreateIniKeyValue INIFILE$, "PRODUCTS", "basepack", DEST$, cmoOverwrite
  535.     CreateIniKeyValue INIFILE$, "PRODUCTS", "exec", EXEDEST$, cmoOverwrite
  536.     CreateIniKeyValue INIFILE$, "PRODUCTS", "config", GDSDEST$ , cmoVital OR cmoOverwrite
  537.     CreateIniKeyValue INIFILE$, "PRODUCTS", "schema", DBXDEST$ , cmoVital OR cmoOverwrite
  538.     CreateIniKeyValue INIFILE$, "PRODUCTS", "index", INDXDEST$, cmoVital OR cmoOverwrite
  539.  
  540.     CreateIniKeyValue INIFILE$, "PRODUCTS", "basemaps", MAPDEST$, cmoNone OR cmoOverwrite
  541.     CreateIniKeyValue INIFILE$, "PRODUCTS", "basedata", DATADEST$, cmoNone OR cmoOverwrite
  542.     CreateIniKeyValue INIFILE$, "PRODUCTS", "help", HLPDEST$, cmoNone OR cmoOverwrite
  543.  
  544.     CreateIniKeyValue INIFILE$, "Dictionary","company", CompanyName$, cmoNone OR cmoOverwrite
  545.     CreateIniKeyValue INIFILE$, "Dictionary","user"   ,    UserName$, cmoNone OR cmoOverwrite
  546.  
  547.     '* put in quote character
  548.     Q$ = CHR$(34)
  549.  
  550.     IF SheetAppExists% > 1 THEN
  551.     '* need to pick which spreadsheet macros to install, more than one option!                      
  552.     ENDIF
  553.  
  554. '**, so here's the task menu:
  555. '**     Run Excel
  556. '**     Reports...
  557. '**     Build Gravity Model...
  558. '** Copy Session...
  559. '** Check For Excel before installing Excel-based Task Lines.
  560.     IF ExcelExists = 1 THEN
  561. '** 
  562.      CreateIniKeyValue INIFILE$, "TASKS", "Run Excel", "EXEC !" + Q$    + ExcelPath$ + Q$, cmoNone OR cmoOverwrite
  563.         '**Create Menu Entry: EXEC !Excel "C:\SCANUS\USERDATA\SCANMCRO.XLM"
  564.     XLREPORTMACRO$= "\QLDATMAC.XLM"
  565.     CreateIniKeyValue INIFILE$, "TASKS", "_QLReport", "EXEC !" + Q$ + ExcelPath$ + " "+ USERDEST$+ XLREPORTMACRO$ + Q$, cmoNone OR cmoOverwrite
  566.     ENDIF
  567.  
  568.         '** Create menu entry: Order Scan/US...
  569.     CreateIniKeyValue INIFILE$, "TASKS", "Order Scan/US...", "EXEC !" + Q$ +"Notepad "+ MakePath(EXEDEST$,"order.txt")+ Q$, cmoNone OR cmoOverwrite
  570.  
  571.  
  572. '** Set up the Program Manager Group, Two Scan/US Icons, and NotePad
  573.     CreateProgmanGroup "Scan/US", "", cmoNone
  574.     ShowProgmanGroup  "Scan/US", 1, cmoNone
  575.  
  576.     CreateProgmanItem "Scan/US", "Scan/US", EXEDEST$ + "\scanwm.exe ", "", cmoOverwrite
  577.     CreateProgmanItem "Scan/US", "Read Me.", "notepad.exe "+MakePath(DEST$,"scenario.txt"), "", cmoOverwrite
  578.     HELPINTRO$="scanmodl.hlp"
  579.     HELPINTRO$="qkstart.hlp"
  580.     CreateProgmanItem "Scan/US", "Scan/US Help", HLPDEST$ + "\" + HELPENTRY$, "", cmoOverwrite
  581.     CreateProgmanItem "Scan/US", "Scan/US Working Model", HLPDEST$ + "\" + HELPINTRO$, "", cmoOverwrite
  582.  
  583.     CreateIniKeyValue  GDSDEST$ + "\scanus.gds", "QuickPaths", "My Editable Databases",USERDEST$, cmoVital OR cmoOverwrite
  584.     CreateIniKeyValue  GDSDEST$ + "\scanus.gds", "QuickPaths", "Scan/US Standard Maps",MAPDEST$, cmoVital OR cmoOverwrite
  585.  
  586.     cwd$ = ""
  587.  
  588. '*    CloseLogFile
  589.  
  590. END SUB
  591.  
  592.  
  593.  
  594.  
  595. '**
  596. '** Purpose:
  597. '**     Adds the specified option files to the copy list.
  598. '** Arguments:
  599. '**     ftype%  - type of files to add, one of the following:
  600. '**             MAPPFILES, DataFILES1, OPTFILES2
  601. '** Returns:
  602. '**     none.
  603. '*************************************************************************
  604. SUB AddOptFilesToCopyList (ftype%) STATIC
  605.  
  606.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  607.  
  608.     IF ftype% = SYSTEMFILES THEN
  609.      AddSectionFilesToCopyList "schema", SrcDir$, DBXDEST$
  610.      AddSectionFilesToCopyList "ini", SrcDir$, INIDEST$
  611.      AddSectionFilesToCopyList "config", SrcDir$, GDSDEST$
  612.      AddSectionFilesToCopyList "exec", SrcDir$, EXEDEST$
  613.     ELSEIF ftype% = MAPFILES THEN
  614.         AddSectionFilesToCopyList "basemaps", SrcDir$, MAPDEST$
  615.     ELSEIF ftype% = DATAFILES THEN
  616.         AddSectionFilesToCopyList "basedata", SrcDir$, DATADEST$
  617.     ELSEIF ftype% = HELPFILES THEN
  618.         AddSectionFilesToCopyList "help", SrcDir$, HLPDEST$
  619.     ELSEIF ftype% = USERFILES THEN
  620.         AddSectionFilesToCopyList "userdata", SrcDir$, USERDEST$
  621.     END IF
  622.     SrcDir$ = ""
  623. END SUB
  624.  
  625.  
  626.  
  627. '**
  628. '** Purpose:
  629. '**     Recalculates disk space for the given option files and sets
  630. '**     the status info symbol "StatusItemsText".
  631. '** Arguments:
  632. '**     ftype% - type of files to add, one of the following:
  633. '**             APPFILES, OPTFILES1, OPTFILES2
  634. '** Returns:
  635. '**     none.
  636. '*************************************************************************
  637. FUNCTION RecalcOptFiles& (ftype%) STATIC 
  638. '** rc%=DoMsgBox("Recalcopt "+STR$(ftype%),"DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  639.  
  640.     CursorSave% = ShowWaitCursor()
  641.     ClearCopyList
  642.  
  643.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  644.     IF  (bScreenCam%) THEN
  645.     ELSE
  646. '**        AddSectionFilesToCopyList "player", SrcDir$, EXEDEST$
  647.     ENDIF
  648.  
  649.     AddOptFilesToCopyList ftype%
  650.  
  651.     fExtra% = 0
  652.  
  653.     SELECT CASE ftype%
  654.     CASE SYSTEMFILES 
  655.     LISTOFCOSTS$ = SYSNEEDS$
  656.  
  657.     CASE MAPFILES 
  658.     LISTOFCOSTS$ = MAPNEEDS$
  659.  
  660.     CASE DATAFILES 
  661.     LISTOFCOSTS$ = DATANEEDS$
  662.  
  663.     CASE HELPFILES 
  664.     LISTOFCOSTS$ = HELPNEEDS$
  665.  
  666.     CASE USERFILES 
  667.     LISTOFCOSTS$ = USERNEEDS$
  668.     
  669.     CASE ELSE
  670.     i% = DoMsgBox("Problem with recalc argument1", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  671.      
  672.     END SELECT
  673.  
  674.     StillNeed& = GetCopyListCost(EXTRACOSTS$, LISTOFCOSTS$, "")
  675.  
  676.     cost& = 0
  677.  
  678.  
  679.  
  680.     FOR i% = 1 TO 26 STEP 1
  681.     cost&  = cost& + VAL(GetListItem(LISTOFCOSTS$, i%))
  682.     usevalue& = VAL(GetListItem(DRIVENEEDS$,i%)) + VAL(GetListItem(LISTOFCOSTS$, i%))
  683.     ReplaceListItem DRIVENEEDS$, i%, STR$(usevalue&) 
  684.     NEXT i%
  685.  
  686. '**    i% = DoMsgBox("Problem with recalc argument2", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  687.  
  688.     RecalcOptFiles = cost&
  689.  
  690.     KSize$ = STR$(cost& / 1024)
  691.  
  692.  
  693.     IF ftype% = SYSTEMFILES THEN
  694. '**    DumpCopyList "d:\scanship\copylist.log"
  695. '**    i% = DoMsgBox("The system file total is "+STR$(cost&), "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  696.      ReplaceListItem PATHSIZES$, ftype%, KSize$ + " K"
  697.     ELSE
  698.      ReplaceListItem PATHSIZES$, ftype%-3, KSize$ + " K"
  699.     END IF
  700.  
  701.     IF StillNeed& > 0 THEN
  702.     ReplaceListItem BIGLIST$, ftype%, "YES"
  703.     ELSE
  704.     ReplaceListItem BIGLIST$, ftype%, ""
  705.     END IF
  706.  
  707.     IF fExtra% THEN
  708.     ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  709.     END IF
  710.     RestoreCursor CursorSave%
  711.     LISTOFCOSTS$ = ""
  712. END FUNCTION
  713.  
  714.  
  715.  
  716. '** Purpose: 
  717. '**     Set up destination variables,
  718. '**     paths, make copy list,
  719. '**     and set up its space requirements.
  720. '** Arguments:
  721. '**     none.
  722. '** Returns:
  723. '**     none.
  724. '*************************************************************************
  725.  
  726. SUB MakeCopyList STATIC
  727.     RecalcPath
  728. '** rc%=DoMsgBox("Recalc the path.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  729.     CreateCopyList
  730. '** rc%=DoMsgBox("copylist created.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  731.  
  732. END SUB
  733.  
  734. '**
  735. '** Purpose:
  736. '**     Recalculates disk space and sets option status info according
  737. '**     to the current destination path.
  738. '** Arguments:
  739. '**     none.
  740. '** Returns:
  741. '**     none.  New Cost of change in Global CostChange&
  742. '**            Global TCOST$ has string equivalent, in "K"
  743. '*************************************************************************
  744. SUB RecalcPath STATIC
  745.  
  746.     CursorSave% = ShowWaitCursor()
  747.  
  748.     ClearDriveNeed
  749.  
  750.     CCSys&= RecalcOptFiles(SYSTEMFILES)
  751.     CCMap&= RecalcOptFiles(MAPFILES)
  752.     CCData&= RecalcOptFiles(DATAFILES)
  753.     CCHelp&= RecalcOptFiles(HELPFILES)
  754.     CCUser&= RecalcOptFiles(USERFILES)
  755.  
  756.     CostCalc
  757.     RestoreCursor CursorSave%
  758. END SUB
  759.  
  760.  
  761. SUB CostCalc STATIC
  762.     Costchange& = CCSys&  + CCMap&  + CCData&  + CCHelp&  + CCUser&
  763.     TCOST$ = STR$ (Costchange&/1024)+" K"
  764.     ReplaceListItem PATHSIZES$,7, TCOST$
  765. END SUB
  766.  
  767.  
  768.  
  769.  
  770. '**
  771. '** Purpose:
  772. '**     Sets drive directory destination variables
  773. '** Arguments:
  774. '**     none.
  775. '** Returns:
  776. '**     none.
  777. '*************************************************************************
  778.  
  779. SUB SetDestVars STATIC
  780.  IF MAPDEST$ = ""  THEN 
  781.     MAPDEST$  = DEST$ + "\SCANMAPS" 
  782.  ENDIF
  783.  
  784.  IF DATADEST$ ="" THEN 
  785.     DATADEST$     = DEST$ + "\SCANDATA" 
  786.  ENDIF
  787.  
  788.  IF DBXDEST$ ="" THEN 
  789.     DBXDEST$      = DEST$ 
  790.  ENDIF
  791.  
  792.  IF EXEDEST$ ="" THEN 
  793.     EXEDEST$      = DEST$ 
  794.  ENDIF
  795.  
  796.  IF GDSDEST$ ="" THEN
  797.  GDSDEST$      = DEST$ 
  798.  ENDIF
  799.  
  800.  IF HLPDEST$ ="" THEN
  801.  HLPDEST$      = DEST$ + "\HELP" 
  802.  ENDIF
  803.  
  804.  IF USERDEST$ ="" THEN
  805.  USERDEST$     = DEST$ + "\USERDATA" 
  806.  ENDIF
  807.  
  808.  IF INDXDEST$ ="" THEN
  809.  INDXDEST$     = DEST$ + "\INDEX" 
  810.  ENDIF
  811. END SUB
  812.  
  813. '** End of SetDestVars
  814.  
  815.  
  816. SUB CleanSetDestVars STATIC
  817.  
  818.             MAPDEST$ = ""   
  819.             DATADEST$ =""  
  820.             DBXDEST$ =""  
  821.             EXEDEST$ =""  
  822.             GDSDEST$ ="" 
  823.             HLPDEST$ ="" 
  824.             USERDEST$ ="" 
  825.             INDXDEST$=""
  826.         SetDestVars
  827. END SUB
  828. '**
  829. '** Purpose:
  830. '**     Appends a file name to the end of a directory path,
  831. '**     inserting a backslash character as needed.
  832. '** Arguments:
  833. '**     szDir$  - full directory path (with optional ending "\")
  834. '**     szFile$ - filename to append to directory
  835. '** Returns:
  836. '**     Resulting fully qualified path name.
  837. '*************************************************************************
  838. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  839.     IF szDir$ = "" THEN
  840.     MakePath = szFile$
  841.     ELSEIF szFile$ = "" THEN
  842.     MakePath = szDir$
  843.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  844.     MakePath = szDir$ + szFile$
  845.     ELSE
  846.     MakePath = szDir$ + "\" + szFile$
  847.     END IF
  848. END FUNCTION
  849.  
  850.  
  851.  
  852.  
  853. GETSUBPATH:
  854.     SetSymbolValue "EditFocus", "END"
  855. GETSUBPATHL1:
  856.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  857.  
  858.     IF sz$ = "CONTINUE" THEN
  859. '**     olddest$ = DEST$
  860.     LocalDest$ = GetSymbolValue("EditTextOut")
  861.  
  862.     ''Validate new path.
  863.     IF IsDirWritable(LocalDest$) = 0 THEN
  864.         GOSUB BADPATH
  865.         GOTO GETSUBPATHL1
  866.     END IF
  867.  
  868.     ''Truncate display if too long.
  869. '        IF LEN(DEST$) > 23 THEN
  870. '            ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  871. '        ELSE
  872. '            ReplaceListItem DRIVETEXT$, 7, DEST$
  873. '        END IF
  874.  
  875. '        ''Recalc if path changed.
  876. '        IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  877. '            RecalcPath
  878. '        END IF
  879.  
  880.     olddest$  = ""
  881.     ELSEIF sz$ = "REACTIVATE" THEN
  882.     '**    RecalcPath
  883.     GOTO GETSUBPATHL1
  884.     ELSEIF sz$ = "EXIT" THEN
  885.     GOSUB ASKQUIT
  886.     GOTO GETSUBPATHL1
  887.     ELSEIF sz$ = "BACK" THEN
  888.         LocalDest$ = GetSymbolValue("EditTextIn")
  889.     ELSE
  890.     END IF
  891.     LocalDest$=UCASE$(LocalDest$)
  892.     UIPop 1
  893.     RETURN
  894.  
  895.  
  896.  
  897.  
  898. SUB MakeNameResource STATIC
  899.     ub% = 31 - LEN(UserName$)
  900.     cb% = 31 - LEN(CompanyName$)
  901.     NameResource =  MID$(UserName$,1,31) + STRING$(ub%,32) + CHR$(0) + MID$(CompanyName$,1,31) + STRING$(cb%,32)+ CHR$(0) + ValidSerialNumber$
  902. END SUB
  903.  
  904.  
  905.  
  906. SUB CreateCopyList STATIC
  907.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  908.     ClearCopyList
  909.     IF  (bScreenCam%) THEN
  910.     ELSE
  911. '**    AddSectionFilesToCopyList "player", SrcDir$, EXEDEST$
  912.     ENDIF
  913.     
  914.     AddSectionFilesToCopyList "exec", SrcDir$, EXEDEST$
  915.     AddSectionFilesToCopyList "schema", SrcDir$, DBXDEST$
  916.     AddSectionFilesToCopyList "ini", SrcDir$, INIDEST$
  917.     AddSectionFilesToCopyList "config", SrcDir$, GDSDEST$
  918.  
  919.     AddSectionFilesToCopyList "basemaps", SrcDir$, MAPDEST$
  920.     AddSectionFilesToCopyList "basedata", SrcDir$, DATADEST$
  921.     AddSectionFilesToCopyList "help", SrcDir$, HLPDEST$
  922.     AddSectionFilesToCopyList "userdata", SrcDir$, USERDEST$
  923. '*    AddSpecialFileToCopyList "Files","scid", SrcDir$, DBXDEST$ + "\scid.dll"
  924. END SUB
  925.  
  926. SUB InitDriveNeed STATIC
  927.     FOR i% = 1 TO 26 STEP 1
  928.     AddListItem DRIVENEEDS$,"0"
  929.     NEXT i%
  930. END SUB
  931.  
  932. SUB ClearDriveNeed STATIC
  933.     FOR i% = 1 TO 26 STEP 1
  934.     ReplaceListItem DRIVENEEDS$,i%,"0"
  935.     NEXT i%
  936. END SUB
  937.  
  938. STATIC FUNCTION DoesSheetExist%(szExt$,szPath$,szName$)
  939.  
  940.     '** First check for the entry
  941.         szPath$=GetIniKeyString("WIN.INI","Extensions",szExt$)
  942.         IF szPath$="" THEN
  943.             DoesSheetExist = 0
  944.         ELSE
  945.     '** Check for the Name in the path specification (asother progs may open same app by extension)
  946. '**DEBUG        rc% = DoMsgBox(szPath$ + szName$, "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  947.  
  948.             IF INSTR(szPath$,szName$) THEN
  949.     '** Then, check for the EXE specified in the entry's path
  950.                 szPath$= MID$(szPath$,1,INSTR(szPath$,".")+3)
  951.                 DoesSheetExist = DoesFileExist(szPath$, femRead)
  952.             ELSE
  953.                 DoesSheetExist = 0
  954.             ENDIF
  955.         ENDIF
  956. END FUNCTION
  957.  
  958.  
  959.